package com.auxgroup.smarthome.utils.excel;

import com.auxgroup.smarthome.utils.excel.constant.SheetVersion;
import com.auxgroup.smarthome.utils.excel.editor.IFontEditor;
import com.auxgroup.smarthome.utils.excel.style.Color;
import com.auxgroup.smarthome.utils.excel.style.font.Font;
import com.auxgroup.smarthome.utils.excel.util.ExcelReadUtil;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;

import java.io.File;
import java.io.IOException;
import java.util.Date;

/**
 * 处理excel的Demo
 * Created by Toby Lai on 2017/5/1.
 */
public class Demo {

    public static void main(String[] args) throws IOException, Exception {
        createExcel();
//        readExcel();
//        Excel excel = new Excel(ExcelReadUtil.readExcel(new File("E:/filter.xlsx")));
//        Workbook workbook = ExcelReadUtil.readExcel(new File("E:/filter.xlsx"));
//        System.out.println(workbook.getSheetAt(0).getRow(0).getCell(1));
//        ExcelReader reader = new ExcelReader();
//        TableEntity tableEntity = reader.readFile(new FileInputStream(new File("E:/filter.xlsx")));
//        tableEntity.getDataEntityList().stream().forEach(x->{
//            x.getFieldEntityList().stream().forEach(y-> {
//                System.out.println("name->"+y.getName()+" value->"+ y.getValue());
//            });
//        });

    }

    public static void createExcel() {
        Object[] val = new Object[]{"插入一行数据",123,'A',Math.PI,new Date(), "hello"};

        Excel excel = new Excel(SheetVersion.EXCEL2007);
        excel.cell(0, 0) //选择第一个单元格
                .value("Hello World!")//写入值
                .align(HorizontalAlignment.CENTER)//设置水平对齐方式
                .bgColor(Color.LIGHT_YELLOW)//设置背景色
                .height(30)//设置高度
                .font(new IFontEditor() {
                    //设置字体
                    @Override
                    public void updateFont(
                            Font font) {
                        font.setBold(true);//粗体
                        font.color(Color.BROWN);//字体颜色
                    }
                });
        excel.region(0, 0, 0, 10).merge();//合并第一行10个单元格
        excel.region("$A$2:$K$2").merge();//也可以这样选取区域

        excel.row(2)//选择第3行
                .value(val)//写入数据
                .bold()
                .addWidth(2000)//增加宽度
                .borderOuter(BorderStyle.DASH_DOT_DOT, Color.CORAL);//设置外边框样式

        excel.row(4,1)//选择第5行，但忽略第1个单元格，从第2个单元格开始操作
                .value(val)
                .bold()
                .borderFull(BorderStyle.THIN, Color.RED);//设置全部边框

        excel.row(6)//选择第7行
                .value(val, 2)//从第3个单元格开始写入数据
                .borderTop(BorderStyle.THIN, Color.BLUE);//只设置上边框

        excel.column(11)
                .value(val)//也可以操作一列
                .align(HorizontalAlignment.CENTER)
                .borderFull(BorderStyle.THICK, Color.CORNFLOWER_BLUE)//设置全部边框
                .autoWidth();//根据内容长度，自动调整列宽

        excel.cell(7, 0).value("=IF(B3=123,\"等于\",\"不等于\")");//写入Excel函数
        excel.cell(7, 1).value(0.578923).dataFormat("0.00%");//设置数据格式
        excel.cell(7, 2).value(0.578923, "0.00%");//也可以这样设置数据格式

        //插入一张图片
        excel.region(9, 0, 17, 8).image("http://www.gizwits.com/media/static/file/upload/51banner.png");

        excel.sheet().freeze(1, 0)//冻结第一行
                .sheetName("这是第一个表");//重命名当前处于工作状态的表的名称

        //设置单元格备注
        excel.cell(8, 5).value("这个单元格设置了备注").comment("这是一条备注");

        //操作第二个表
        excel.setWorkingSheet(1).sheetName("第二个表");//把第二个表设置为工作状态，并改名
        excel.row(0).value(val);//第二个表写入数据
        excel.sheet().groupColumn(0, 3);//按列分组

        excel.saveExcel("D:/helloworld");
        excel.close();
    }

    public static void readExcel() {
        Excel excel = new Excel(ExcelReadUtil.readExcel(new File("D:/filter.xlsx")));
        System.out.printf( excel.getWorkbook().getSheetAt(0).getSheetName()+"");
        excel.saveExcel("D:/helloworldCopy");
        excel.close();
    }

}
